package main

import (
	"fmt"
	"runtime"
	_ "time"
)

//为了达到真正的并行，需要告诉Go允许同时最多使用多个核。
//需要设置最大开2个原生线程,需要用到runtime包(runtime包是goroutine的调度器)
var quit3 chan int = make(chan  int)

func loop3(){
	for i := 0; i < 100; i++ {
		runtime.Gosched()  //显示地出让CPU时间给其他goroutine
		//这种主动让出CPU时间的方式仍然是在单核里跑。但手工地切换goroutine导致了看上去的“并行”
		fmt.Println(i)
		//time.Sleep(time.Second)
	}
	quit3 <- 0
}

//并行模型
func main() {
	//runtime.GOMAXPROCS(2) //最多使用两个核
	go loop3()
	go loop3()

	for i := 0; i < 2 ; i++ {
		<-quit3
	}
}
//会看到两个goroutine抢占式地输出数据
